// 给定两个 01 字符串 a 和 b ，请计算它们的和，并以二进制字符串的形式输出。
//
// 输入为 非空 字符串且只包含数字 1 和 0。
function addBinary(a: string, b: string): string {
    let i = a.length - 1,
        j = b.length - 1,
        r = 0;
    let reuslt = "";
    //? r代表下一位运算的进位 r>0是两字符串都处理完了 但仍存在进位的情况
    while (i >= 0 || j >= 0 || r > 0) {
        //? 单独判断 处理两者长度不同的情况
        if (i >= 0) r += Number(a[i--]);
        if (j >= 0) r += Number(b[j--]);
        //? 此位的值
        reuslt += r % 2;
        //? 当前位进完位之后>>1 右移一位 得到下一次的进位初始值
        r >>= 1;
    }
    return reuslt.split("").reverse().join("");
}
